electron 学习笔记(三)——自定义标题栏

系列文章目录

第一章 基础知识点
第二章 electron-vue
第三章 自定义标题栏




前言

electron项目默认有自己的标题栏(包含标题、最小化、最大化,关闭),根据项目需求,可以去掉,定制开发


一、效果预览

在这里插入图片描述

二、重点步骤

1.去掉默认的标题栏和边框(Main process)

默认标题栏

代码如下(src/main/index.js):

mainWindow = new BrowserWindow({
    useContentSize: true,
    frame: false  // 去掉默认的标题栏
  })

2.自定义标题栏(Render process)

代码如下(src/renderer/components/MyHeader.vue):

<template>
  <div class="header  text-white">
   我是一个标题栏
  </div>
</template>

<script>
export default {
  name: 'MyHeader',
}
</script>

<style lang="scss">
.header {
  width: 100%;
  height: 100%;
  display: flex;
  align-items: center;
  -webkit-app-region: drag;  // 设置可拖动
}
</style>

去掉标题栏后窗口则不可拖动,在自定义的标题栏中需加CSS:-webkit-app-region: drag; // 设置可拖动)

3.在标题栏中引用 【天气】组件

<iframe ref="tianqi" frameborder="0" width="280" height="36" scrolling="no" hspace="0" src="https://i.tianqi.com/?c=code&id=99" style="margin-left:20px;"></iframe>

iframe内文字颜色改为白色

mounted () {
    const iframe = this.$refs['tianqi']
    iframe.addEventListener('load', () => {
      const a = iframe.contentDocument.querySelector('a')
      a.style.color = 'white'
    })
}

4.最小化、关闭窗口

按钮元素:

<span class="float-right btn-opt text-white">
    <i class="el-icon-minus mr-10" @click="toMin()"></i>
    <i class="el-icon-close" @click="toClose()"></i>
</span>

操作窗口,需要用到主进程的API,所以这里需要借助 [ipcRenderer]进行渲染进程和主进程的通信:

标题栏组件:src/renderer/components/MyHeader.vue

import { ipcRenderer } from 'electron'
methods: {
    toMin () {
      ipcRenderer.send('min-app')
    },
    toClose () {
      ipcRenderer.send('close-app')
    }
  }

主进程src/main/index.js

import { ipcMain } from 'electron'
ipcMain.on('close-app', () => {
  if (mainWindow) {
    mainWindow.close()
  }
})
ipcMain.on('min-app', () => {
  mainWindow.minimize()
})

总结

至此,一个简单的标题栏组件就完成了~

  • 3
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
在使用 Electron-Vue 构建应用程序时,可以自定义应用程序窗口的标题栏。以下是一些步骤: 1. 在 `main.js` 文件中,找到 `createWindow` 函数,并将 `frame: false` 改为 `frame: true`。这将启用原生窗口边框。 2. 在 `App.vue` 文件中,添加以下代码: ``` <template> <div class="app"> <div class="titlebar"> <div class="title">{{ title }}</div> <div class="buttons"> <div class="minimize" @click="minimizeWindow"></div> <div class="maximize" @click="toggleMaximize"></div> <div class="close" @click="closeWindow"></div> </div> </div> <router-view/> </div> </template> <script> export default { data() { return { title: 'My App' } }, methods: { minimizeWindow() { this.$store.dispatch('minimizeWindow') }, toggleMaximize() { this.$store.dispatch('toggleMaximize') }, closeWindow() { this.$store.dispatch('closeWindow') } } } </script> <style scoped> .titlebar { -webkit-app-region: drag; height: 30px; background-color: #333; color: #fff; display: flex; justify-content: space-between; align-items: center; padding: 0 10px; } .title { font-size: 14px; font-weight: bold; } .buttons { display: flex; } .minimize, .maximize, .close { width: 12px; height: 12px; margin-left: 5px; background-repeat: no-repeat; background-position: center; -webkit-app-region: no-drag; } .minimize { background-image: url(./assets/img/minimize.png); } .maximize { background-image: url(./assets/img/maximize.png); } .close { background-image: url(./assets/img/close.png); } </style> ``` 3. 在 `store.js` 文件中,添加以下代码: ``` const state = { window: null, isMaximized: false } const mutations = { SET_WINDOW(state, window) { state.window = window }, SET_IS_MAXIMIZED(state, isMaximized) { state.isMaximized = isMaximized } } const actions = { createWindow({ commit }) { const win = new BrowserWindow({ width: 800, height: 600, show: false, frame: false, webPreferences: { nodeIntegration: true } }) win.on('closed', () => { app.quit() }) commit('SET_WINDOW', win) }, minimizeWindow({ state }) { state.window.minimize() }, toggleMaximize({ state, commit }) { if (state.isMaximized) { state.window.unmaximize() commit('SET_IS_MAXIMIZED', false) } else { state.window.maximize() commit('SET_IS_MAXIMIZED', true) } }, closeWindow({ state }) { state.window.close() } } ``` 4. 在 `index.html` 文件中,添加以下代码: ``` <head> ... <style> .app { -webkit-app-region: no-drag; } </style> </head> ``` 5. 在 `static/img` 文件夹中添加 `minimize.png`、`maximize.png` 和 `close.png` 图片。 现在,您可以自定义标题栏样式并添加标题栏按钮。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值